#include "head.h" //公用工具函数

// 菜单信息 - 登陆用
const wchar_t *title = L"欢迎来到航空公司管理系统";
const wchar_t *option_1[] = {L"登录", L"注册", L"返回"};

// 菜单信息 - 管理员用
const wchar_t *title_root = L"管理员菜单";
const wchar_t *option_root[] = {
    L"设定航班",
    L"修改航班",
    L"修改普通用户",
    L"退出"};

// 菜单信息 - 普通用户用
const wchar_t *title_user = L"用户菜单";
const wchar_t *option_user[] = {
    L"购票",
    L"退票",
    L"余额充值",
    L"查看航班",
    L"修改密码",
    L"我的订单",
    L"退出"};

// 系统初始化
FlightSystem Sys_init(void)
{
    FlightSystem Flight_sys;
    Flight_sys.Flight_list = init_double_link_list();     // 航班信息
    Flight_sys.ADMIN_USER = init_double_link_list_u();    // 管理员账户信息
    Flight_sys.REGULAR_USER = init_double_link_list_u();  // 普通用户信息
    Flight_sys.SILVER_USER = init_double_link_list_u();   // 银卡会员信息 (9折)
    Flight_sys.GOLD_USER = init_double_link_list_u();     // 金卡会员信息 (8折)
    Flight_sys.PLATINUM_USER = init_double_link_list_u(); // 白金会员信息 (7折)

    // 从文件中导入数据
    flight_data_file_scanf(Flight_sys.Flight_list);                // 航班信息
    user_data_file_scanf(Flight_sys.ADMIN_USER, ADMIN_FILE);       // 管理员账户信息文件
    user_data_file_scanf(Flight_sys.REGULAR_USER, REGULAR_FILE);   // 普通用户信息文件
    user_data_file_scanf(Flight_sys.SILVER_USER, SILVER_FILE);     // 银卡会员信息文件 (9折)
    user_data_file_scanf(Flight_sys.GOLD_USER, GOLD_FILE);         // 金卡会员信息文件 (8折)
    user_data_file_scanf(Flight_sys.PLATINUM_USER, PLATINUM_FILE); // 白金会员信息文件 (7折)

    system("clear");
    return Flight_sys;
}

// 合表
u_list *comd(FlightSystem Flight_sys)
{
    // Flight_sys = Sys_init(); // 各个链表初始化,并从文件中获取信息
    // 用户信息合表
    u_list *list = init_double_link_list_u();
    list = merge_double_link_lists_u(list, Flight_sys.ADMIN_USER);    // 管理员账户信息文件
    list = merge_double_link_lists_u(list, Flight_sys.REGULAR_USER);  // 普通用户信息文件
    list = merge_double_link_lists_u(list, Flight_sys.SILVER_USER);   // 银卡会员信息文件 (9折)
    list = merge_double_link_lists_u(list, Flight_sys.GOLD_USER);     // 金卡会员信息文件 (8折)
    list = merge_double_link_lists_u(list, Flight_sys.PLATINUM_USER); // 白金会员信息文件 (7折)
    return list;
}

// 用户合表
u_list *comd_u(FlightSystem Flight_sys)
{
    u_list *list = init_double_link_list_u();
    list = merge_double_link_lists_u(list, Flight_sys.REGULAR_USER);  // 普通用户信息文件
    list = merge_double_link_lists_u(list, Flight_sys.SILVER_USER);   // 银卡会员信息文件 (9折)
    list = merge_double_link_lists_u(list, Flight_sys.GOLD_USER);     // 金卡会员信息文件 (8折)
    list = merge_double_link_lists_u(list, Flight_sys.PLATINUM_USER); // 白金会员信息文件 (7折)
    return list;
}

// 登录界面
u_data enter_u(u_list *list, FlightSystem Flight_sys) // list普通用户，Flight_sys为链表初始化并从文件中读取信息
{
    Flight_sys = Sys_init();
    int flag1 = 0; // 用于判定选择
    u_data data;
    // 登陆界面
    system("clear");
    flag1 = display_menu(title, option_1, 3);
    switch (flag1)
    {
    case 1: // 登录

        data = log_in(Flight_sys);
        return data;

        break;
    case 2: // 注册
        register_u(Flight_sys);
        break;
    default: // 退出
        exit(0);
        break;
    }
    exit(0);
}

// 注册
u_node *register_u(FlightSystem Flight_sys)
{
    //    FlightSystem Flight_sys=Sys_init();
    while (1)
    {
        // 注册界面
        int flag1 = 0;
        system("clear");
        printf("欢迎使用扶摇九天系统\n");
        char buf[128];
        u_data new_user = {.grade = 2, .value = 0, .ticket = {NULL}};
        u_list *list = comd(Flight_sys);
        u_node *ptr = list->next;
        printf("请输入要注册账号");
        scanf("%s", buf);
        do
        {
            if (0 == (strcmp(ptr->data.name, buf)))
            {
                printf("该账号已存在，请重新输入\n");
                scanf("%s", buf);
                flag1 = 1;
                break;
            }
            ptr = ptr->next;
        } while (ptr != list->next);
        if (flag1 != 1)
        {
            strcpy(new_user.name, buf);
            printf("请设置您的密码:");
            scanf("%s", buf);
            strcpy(new_user.passwd, buf);
            printf("请确认您的密码:");
            scanf("%s", buf);
            if (0 == strcmp(buf, new_user.passwd))
            {
                printf("注册成功,重新进入\n");
                insert_double_node_u(Flight_sys.REGULAR_USER, new_user, 1);  // 读取普通用户信息注册信息头插
                user_data_file_print(Flight_sys.REGULAR_USER, REGULAR_FILE); // 将普通用户信息返回文件
                return NULL;
            }
            else
            {
                printf("两次输入的密码不一致，请重新输入\n");
            }
        }
    }
    return NULL;
}

// 系统登录
u_data log_in(FlightSystem Flight_sys)
{
    // print_forward_double_link_list_u(Flight_sys.REGULAR_USER);
    // print_forward_double_link_list_u(Flight_sys.ADMIN_USER);
    // print_forward_double_link_list_u(Flight_sys.GOLD_USER);
    // print_forward_double_link_list_u(Flight_sys.SILVER_USER);
    // print_forward_double_link_list_u(Flight_sys.PLATINUM_USER);
    u_list *list = comd(Flight_sys);
    // print_forward_double_link_list_u(list);
    // 开始登录
    u_data data = Log_in(list);
    return data;
}

// 系统菜单
void menu(FlightSystem Flight_sys, u_data data)
{
    u_list *a_u_list = comd_u(Flight_sys); // 所有用户的链表

    // 分支
    int flag = 0;
    switch (data.grade)
    {
    case 1:
        // 管理员功能界面
        printf("欢迎管理员用户登陆\n");
        flag = display_menu(title_root, option_root, 4);
        break;
    case 2:
        // 普通用户功能界面
        printf("欢迎普通用户登陆\n");
        flag = display_menu(title_user, option_user, 7) + 4;
        break;
    case 3:
        // 普通用户功能界面
        printf("欢迎白银用户登陆\n");
        flag = display_menu(title_user, option_user, 7) + 4;
        break;
    case 4:
        // 普通用户功能界面
        printf("欢迎黄金用户登陆\n");
        flag = display_menu(title_user, option_user, 7) + 4;
        break;
    case 5:
        // 普通用户功能界面
        printf("欢迎铂金用户登陆\n");
        flag = display_menu(title_user, option_user, 7) + 4;
        break;
    }

    // 菜单选项分支处理
    switch (flag)
    {
    case 1:
        // 管理员 - 设定航班
        set_flight(Flight_sys.Flight_list);
        break;
    case 2:
        // 管理员 - 修改航班
        mod_flight(Flight_sys.Flight_list);
        break;
    case 3:
        // 管理员 - 修改普通用户
        mod_com_u(a_u_list);
        break;
    case 4:
        // 用户 - 购票
        break;
    case 5:
        // 用户 - 退票
        break;
    case 6:
        // 用户 - 余额充值
        break;
    case 7:
        // 用户 - 查看航班
        break;
    case 8:
        // 用户 - 修改密码
        break;
    case 9:
        // 用户 - 我的订单
        break;
    case 10:
        // 用户 - 退出
        break;
    default:
        break;
    }
}


